package day03;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

import org.junit.Test;

/**
 * 实现时间的计算: 要求用户输入身份证号，若格式有误，要求其重新输入。然后根据身份证号码输出20岁生日 所在周的周三的日期。 例如:
 * 出生日期:1992-07-15。 20岁生日:2012-07-15 当周的周三为:2012-07-18
 * 
 * @author Bonnie
 *
 */
public class Test05 {
	@Test
	public void test() {
		Scanner console = new Scanner(System.in);
		String str;
		while (true) {
			System.out.print("请输入身份证号：");// "^\d{17}(\d|X)$" 
			str = console.nextLine();
			String regex = "^\\d{17}(\\d|X)$";
			if (str.matches(regex)) {
				break;
			}
		}
		// 获取身份证号的出生日期
		int year = Integer.parseInt(str.substring(6, 10));
		int month = Integer.parseInt(str.substring(10, 12));
		int day = Integer.parseInt(str.substring(12, 14));
		Calendar cal = Calendar.getInstance();
		// 设置出生日期
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month - 1);
		cal.set(Calendar.DATE, day);
		// 设置输出格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = cal.getTime();
		String str2 = sdf.format(date);
		System.out.println("出生日期：" + str2);
		// 设置20岁生日
		cal.add(Calendar.YEAR, 20);
		date = cal.getTime();
		str2 = sdf.format(date);
		System.out.println("20岁生日：" + str2);
		// 设置20岁生日 所在周的周三的日期
		cal.set(Calendar.DAY_OF_WEEK, 4);
		date = cal.getTime();
		str2 = sdf.format(date);
		System.out.println("20岁生日所在周的周三:" + str2);
		console.close();
	}
}
